<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分布式系统高可用架构设计指南</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css">
    <link rel="stylesheet" href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            color: #333;
            line-height: 1.6;
        }
        .hero-bg {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        .section-title {
            position: relative;
            padding-left: 1.5rem;
        }
        .section-title:before {
            content: '';
            position: absolute;
            left: 0;
            top: 50%;
            transform: translateY(-50%);
            width: 4px;
            height: 1.5em;
            background: #667eea;
            border-radius: 2px;
        }
        .card {
            transition: all 0.3s ease;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
        }
        .card:hover {
            transform: translateY(-5px);
            box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
        }
        .highlight {
            background: linear-gradient(90deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%);
            border-left: 4px solid #667eea;
            padding: 1rem;
            border-radius: 0 4px 4px 0;
        }
        .tooltip {
            position: relative;
            display: inline-block;
            border-bottom: 1px dotted #667eea;
            cursor: help;
        }
        .tooltip .tooltiptext {
            visibility: hidden;
            width: 200px;
            background-color: #555;
            color: #fff;
            text-align: center;
            border-radius: 6px;
            padding: 5px;
            position: absolute;
            z-index: 1;
            bottom: 125%;
            left: 50%;
            margin-left: -100px;
            opacity: 0;
            transition: opacity 0.3s;
        }
        .tooltip:hover .tooltiptext {
            visibility: visible;
            opacity: 1;
        }
        .mermaid {
            background-color: white;
            padding: 1.5rem;
            border-radius: 0.5rem;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
        }
    </style>
</head>
<body>
    <!-- Hero Section -->
    <section class="hero-bg text-white py-20 md:py-32 px-4">
        <div class="container mx-auto max-w-5xl">
            <div class="flex flex-col md:flex-row items-center">
                <div class="md:w-1/2 mb-10 md:mb-0">
                    <h1 class="text-4xl md:text-5xl font-bold mb-4">分布式系统高可用架构设计</h1>
                    <p class="text-xl opacity-90 mb-6">构建99.99%可靠性的现代软件架构</p>
                    <div class="flex items-center mb-6">
                        <div class="mr-4">
                            <div class="text-3xl font-bold">99.99%</div>
                            <div class="text-sm opacity-80">年度可用性</div>
                        </div>
                        <div class="h-12 w-px bg-white opacity-30"></div>
                        <div class="ml-4">
                            <div class="text-3xl font-bold">53分钟</div>
                            <div class="text-sm opacity-80">年停机时间</div>
                        </div>
                    </div>
                    <a href="#content" class="inline-block bg-white text-purple-700 hover:bg-gray-100 px-6 py-3 rounded-full font-medium transition duration-300">
                        <i class="fas fa-arrow-down mr-2"></i>探索架构设计
                    </a>
                </div>
                <div class="md:w-1/2 flex justify-center">
                    <img src="https://cdn.nlark.com/yuque/0/2025/png/21449790/1741098293440-08a27d84-ff36-4c06-a640-4edbcacf5290.png" alt="分布式系统架构图" class="rounded-lg shadow-xl max-h-80">
                </div>
            </div>
        </div>
    </section>

    <!-- Main Content -->
    <section id="content" class="py-16 bg-gray-50">
        <div class="container mx-auto max-w-5xl px-4">
            <!-- Introduction -->
            <div class="mb-16">
                <p class="text-lg text-gray-700 leading-relaxed">
                    在现代软件架构中，分布式系统已经成为构建高可用、高并发应用的核心技术之一。随着业务规模的扩大和用户量的增长，确保系统的高可用性(High Availability)成为架构设计的首要考量。本文将系统性地介绍高可用性的核心概念、架构设计原则以及最佳实践。
                </p>
            </div>

            <!-- Chapter 1 -->
            <div class="mb-16">
                <h2 class="text-3xl font-bold mb-6 section-title">1. 高可用性概述</h2>
                
                <div class="mb-10">
                    <h3 class="text-2xl font-semibold mb-4">1.1 什么是高可用性</h3>
                    <p class="mb-4">
                        高可用性（High Availability, HA）指的是系统能够在长时间内保持正常运行，即使在某些组件发生故障的情况下，仍然能够提供服务。
                    </p>
                    <div class="highlight mb-4">
                        <p>通常使用 <strong>99.9%（三个9）</strong> 或 <strong>99.99%（四个9）</strong> 来衡量高可用性。</p>
                    </div>
                    <div class="grid md:grid-cols-3 gap-6 mb-6">
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-clock"></i></div>
                            <h4 class="font-bold mb-2">99.9% 可用性</h4>
                            <p class="text-sm text-gray-600">每年约8.76小时停机时间</p>
                        </div>
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-star"></i></div>
                            <h4 class="font-bold mb-2">99.99% 可用性</h4>
                            <p class="text-sm text-gray-600">每年约53分钟停机时间</p>
                        </div>
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-trophy"></i></div>
                            <h4 class="font-bold mb-2">99.999% 可用性</h4>
                            <p class="text-sm text-gray-600">每年约5分钟停机时间</p>
                        </div>
                    </div>
                </div>
                
                <div>
                    <h3 class="text-2xl font-semibold mb-4">1.2 高可用性的衡量标准</h3>
                    <p class="mb-4">
                        高可用系统的主要衡量标准包括：
                    </p>
                    <ul class="list-disc pl-6 mb-6">
                        <li class="mb-2">
                            <strong>MTBF（Mean Time Between Failures）</strong>：两次故障之间的平均时间。
                        </li>
                        <li class="mb-2">
                            <strong>MTTR（Mean Time to Repair）</strong>：从故障发生到修复的平均时间。
                        </li>
                        <li>
                            <strong>SLA（Service Level Agreement）</strong>：服务提供商对系统可用性的承诺。
                        </li>
                    </ul>
                    <div class="bg-white p-6 rounded-lg">
                        <div class="mermaid">
                            pie title 高可用性关键指标
                                "MTBF" : 45
                                "MTTR" : 15
                                "SLA" : 40
                        </div>
                    </div>
                </div>
            </div>

            <!-- Chapter 2 -->
            <div class="mb-16">
                <h2 class="text-3xl font-bold mb-6 section-title">2. 分布式系统的高可用架构设计</h2>
                
                <div class="mb-10">
                    <h3 class="text-2xl font-semibold mb-4">2.1 负载均衡</h3>
                    <p class="mb-4">
                        负载均衡是高可用系统的关键设计之一，通过均衡请求流量来防止单点过载。
                    </p>
                    <div class="highlight mb-6">
                        <h4 class="font-bold mb-2">常见的负载均衡策略：</h4>
                        <ul class="list-disc pl-6">
                            <li class="mb-1"><strong>DNS 负载均衡</strong>（基于域名解析的流量分发）</li>
                            <li class="mb-1"><strong>Nginx 或 HAProxy 负载均衡</strong>（基于反向代理的均衡）</li>
                            <li class="mb-1"><strong>LVS（Linux Virtual Server）</strong></li>
                            <li><strong>云厂商提供的负载均衡（如 AWS ELB、阿里云 SLB）</strong></li>
                        </ul>
                    </div>
                    <div class="bg-white p-6 rounded-lg mb-6">
                        <div class="mermaid">
                            graph LR
                                A[客户端] --> B[负载均衡器]
                                B --> C[服务实例1]
                                B --> D[服务实例2]
                                B --> E[服务实例3]
                        </div>
                    </div>
                </div>
                
                <div class="mb-10">
                    <h3 class="text-2xl font-semibold mb-4">2.2 服务冗余与故障转移</h3>
                    <p class="mb-4">
                        通过 <strong>多实例部署</strong> 确保单个实例故障不会影响整体服务。
                    </p>
                    <div class="highlight mb-6">
                        <h4 class="font-bold mb-2">实现方法：</h4>
                        <ul class="list-disc pl-6">
                            <li class="mb-1"><strong>主备架构（Master-Slave）</strong>：如 MySQL 主从复制</li>
                            <li class="mb-1"><strong>Raft/Paxos 共识算法</strong>：如 Etcd、Zookeeper</li>
                            <li><strong>多数据中心部署</strong>：如 AWS 多区域部署</li>
                        </ul>
                    </div>
                    <div class="grid md:grid-cols-2 gap-6">
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-server"></i></div>
                            <h4 class="font-bold mb-2">主备架构</h4>
                            <p class="text-sm text-gray-600">单主多从，主节点负责写操作，从节点同步数据</p>
                            <div class="mt-4">
                                <div class="mermaid">
                                    graph TD
                                        M[Master] -->|复制| S1[Slave1]
                                        M -->|复制| S2[Slave2]
                                        M -->|复制| S3[Slave3]
                                </div>
                            </div>
                        </div>
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-network-wired"></i></div>
                            <h4 class="font-bold mb-2">多数据中心</h4>
                            <p class="text-sm text-gray-600">跨区域部署，提高容灾能力</p>
                            <div class="mt-4">
                                <div class="mermaid">
                                    graph TD
                                        A[数据中心1] -->|同步| B[数据中心2]
                                        A -->|同步| C[数据中心3]
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                
                <div class="mb-10">
                    <h3 class="text-2xl font-semibold mb-4">2.3 分布式存储与数据库高可用</h3>
                    <p class="mb-4">
                        存储和数据库是分布式系统的核心，确保其高可用性至关重要。
                    </p>
                    <div class="grid md:grid-cols-3 gap-6 mb-6">
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-database"></i></div>
                            <h4 class="font-bold mb-2">数据库集群</h4>
                            <p class="text-sm text-gray-600">MySQL Galera Cluster, PostgreSQL Patroni</p>
                        </div>
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-cloud"></i></div>
                            <h4 class="font-bold mb-2">NoSQL 高可用架构</h4>
                            <p class="text-sm text-gray-600">MongoDB Replica Set, Cassandra</p>
                        </div>
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-hdd"></i></div>
                            <h4 class="font-bold mb-2">分布式文件系统</h4>
                            <p class="text-sm text-gray-600">HDFS, Ceph, MinIO</p>
                        </div>
                    </div>
                    <div class="bg-white p-6 rounded-lg">
                        <div class="mermaid">
                            graph LR
                                C[客户端] --> D[代理层]
                                D --> E[数据库节点1]
                                D --> F[数据库节点2]
                                D --> G[数据库节点3]
                                E -->|复制| F
                                F -->|复制| G
                                G -->|复制| E
                        </div>
                    </div>
                </div>
                
                <div>
                    <h3 class="text-2xl font-semibold mb-4">2.4 服务注册与发现</h3>
                    <p class="mb-4">
                        当系统规模扩大后，服务实例可能会动态变化，因此需要自动发现新加入的实例。
                    </p>
                    <div class="highlight mb-6">
                        <h4 class="font-bold mb-2">常见方案：</h4>
                        <ul class="list-disc pl-6">
                            <li class="mb-1"><strong>Zookeeper</strong>（适用于强一致性需求）</li>
                            <li class="mb-1"><strong>Eureka</strong>（Spring Cloud 生态）</li>
                            <li><strong>Consul</strong>（轻量级服务注册）</li>
                        </ul>
                    </div>
                    <div class="bg-white p-6 rounded-lg">
                        <div class="mermaid">
                            sequenceDiagram
                                参与者 客户端
                                参与者 注册中心
                                参与者 服务提供者
                                
                                服务提供者->>注册中心: 注册服务
                                客户端->>注册中心: 查询服务
                                注册中心-->>客户端: 返回服务列表
                                客户端->>服务提供者: 调用服务
                        </div>
                    </div>
                </div>
            </div>

            <!-- Chapter 3 -->
            <div class="mb-16">
                <h2 class="text-3xl font-bold mb-6 section-title">3. 容错与降级策略</h2>
                
                <div class="mb-10">
                    <h3 class="text-2xl font-semibold mb-4">3.1 熔断机制</h3>
                    <p class="mb-4">
                        熔断机制用于防止系统雪崩，常见的熔断器框架有 Hystrix、Resilience4j。
                    </p>
                    <div class="grid md:grid-cols-2 gap-6">
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-fire-extinguisher"></i></div>
                            <h4 class="font-bold mb-2">熔断器状态</h4>
                            <div class="mt-4">
                                <div class="mermaid">
                                    stateDiagram-v2
                                        [*] --> Closed
                                        Closed --> Open: 失败次数超过阈值
                                        Open --> HalfOpen: 超时
                                        HalfOpen --> Closed: 请求成功
                                        HalfOpen --> Open: 请求失败
                                </div>
                            </div>
                        </div>
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-shield-alt"></i></div>
                            <h4 class="font-bold mb-2">熔断器参数</h4>
                            <ul class="list-disc pl-6 mt-4">
                                <li class="mb-2"><strong>失败阈值</strong>：触发熔断的失败次数</li>
                                <li class="mb-2"><strong>超时时间</strong>：熔断后尝试恢复的时间</li>
                                <li><strong>半开状态</strong>：部分请求用于测试服务恢复情况</li>
                            </ul>
                        </div>
                    </div>
                </div>
                
                <div class="mb-10">
                    <h3 class="text-2xl font-semibold mb-4">3.2 降级策略</h3>
                    <p class="mb-4">
                        当系统压力过大时，主动降级部分服务以保证核心功能可用。例如：
                    </p>
                    <div class="highlight mb-6">
                        <ul class="list-disc pl-6">
                            <li class="mb-1"><strong>静态页面降级</strong>：将动态页面转换为静态 HTML</li>
                            <li><strong>限流降级</strong>：使用令牌桶、漏桶算法控制流量</li>
                        </ul>
                    </div>
                    <div class="bg-white p-6 rounded-lg">
                        <div class="mermaid">
                            graph TD
                                A[客户端请求] --> B{系统负载}
                                B -->|正常| C[完整服务]
                                B -->|过高| D[降级服务]
                                D --> E[静态内容]
                                D --> F[核心功能]
                        </div>
                    </div>
                </div>
                
                <div>
                    <h3 class="text-2xl font-semibold mb-4">3.3 数据一致性</h3>
                    <p class="mb-4">
                        分布式系统中的数据一致性问题可以通过 CAP 原则和 BASE 理论进行权衡。
                    </p>
                    <div class="grid md:grid-cols-2 gap-6 mb-6">
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-balance-scale"></i></div>
                            <h4 class="font-bold mb-2">CAP 原则</h4>
                            <p class="mb-4 text-sm text-gray-600">分布式系统最多只能同时满足其中两项</p>
                            <div class="mermaid">
                                pie title CAP 原则
                                    "一致性 (Consistency)" : 35
                                    "可用性 (Availability)" : 35
                                    "分区容错性 (Partition Tolerance)" : 30
                            </div>
                        </div>
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-cubes"></i></div>
                            <h4 class="font-bold mb-2">BASE 理论</h4>
                            <ul class="list-disc pl-6">
                                <li class="mb-1"><strong>基本可用 (Basically Available)</strong></li>
                                <li class="mb-1"><strong>软状态 (Soft state)</strong></li>
                                <li><strong>最终一致性 (Eventually consistent)</strong></li>
                            </ul>
                        </div>
                    </div>
                    <div class="highlight">
                        <h4 class="font-bold mb-2">一致性解决方案：</h4>
                        <ul class="list-disc pl-6">
                            <li class="mb-1"><strong>分布式事务（如 TCC 模型）</strong></li>
                            <li class="mb-1"><strong>消息队列补偿机制（Kafka、RocketMQ）</strong></li>
                            <li><strong>幂等性设计（防止重复提交）</strong></li>
                        </ul>
                    </div>
                </div>
            </div>

            <!-- Chapter 4 -->
            <div>
                <h2 class="text-3xl font-bold mb-6 section-title">4. 监控与自动恢复</h2>
                
                <div class="mb-10">
                    <h3 class="text-2xl font-semibold mb-4">4.1 监控系统</h3>
                    <p class="mb-4">
                        构建一套完善的监控系统，能够实时发现并处理故障。
                    </p>
                    <div class="grid md:grid-cols-3 gap-6 mb-6">
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-chart-line"></i></div>
                            <h4 class="font-bold mb-2">Prometheus + Grafana</h4>
                            <p class="text-sm text-gray-600">开源监控方案</p>
                        </div>
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-search"></i></div>
                            <h4 class="font-bold mb-2">ELK Stack</h4>
                            <p class="text-sm text-gray-600">日志分析</p>
                        </div>
                        <div class="card bg-white p-6 rounded-lg">
                            <div class="text-purple-600 text-2xl mb-2"><i class="fas fa-project-diagram"></i></div>
                            <h4 class="font-bold mb-2">Jaeger</h4>
                            <p class="text-sm text-gray-600">分布式链路追踪</p>
                        </div>
                    </div>
                    <div class="bg-white p-6 rounded-lg">
                        <div class="mermaid">
                            graph TD
                                A[应用] -->|指标| B(Prometheus)
                                A -->|日志| C(Elasticsearch)
                                A -->|追踪| D(Jaeger)
                                B --> E[Grafana]
                                C --> E
                                D --> E
                        </div>
                    </div>
                </div>
                
                <div>
                    <h3 class="text-2xl font-semibold mb-4">4.2 自动故障恢复</h3>
                    <ul class="list-disc pl-6 mb-6">
                        <li class="mb-2"><strong>自动重启（Kubernetes 自愈能力）</strong></li>
                        <li class="mb-2"><strong>流量调度（Service Mesh, Istio）</strong></li>
                        <li><strong>智能扩容（HPA, Cluster Autoscaler）</strong></li>
                    </ul>
                    <div class="bg-white p-6 rounded-lg">
                        <div class="mermaid">
                            flowchart LR
                                A[故障检测] --> B{严重程度}
                                B -->|自动恢复| C[重启容器]
                                B -->|流量重定向| D[健康节点]
                                B -->|扩展资源| E[自动扩容]
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </section>

    <!-- Footer -->
    <footer class="bg-gray-900 text-white py-8">
        <div class="container mx-auto max-w-5xl px-4">
            <div class="flex flex-col md:flex-row justify-between items-center">
                <div class="mb-4 md:mb-0">
                    <h3 class="text-xl font-bold mb-2">技术小馆</h3>
                    <p class="text-gray-400">专业的架构设计与技术分享平台</p>
                </div>
                <div>
                    <a href="http://www.yuque.com/jtostring" class="hover:text-purple-400 transition duration-300">
                        <i class="fas fa-globe mr-2"></i>www.yuque.com/jtostring
                    </a>
                </div>
            </div>
            <div class="mt-8 pt-6 border-t border-gray-800 text-center text-gray-500 text-sm">
                &copy; 2023 技术小馆. 保留所有权利.
            </div>
        </div>
    </footer>

    <script>
        mermaid.initialize({
            startOnLoad: true,
            theme: 'default',
            flowchart: {
                useMaxWidth: false,
                htmlLabels: true,
                curve: 'basis'
            }
        });
    </script>
</body>
</html>